package cl.duocap.refaxion.dao;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import cl.duocap.refaxion.dto.ServicioDTO;
import java.util.*;


public class ServicioDAO {
	
	private Connection conexion;

	public Connection getConexion() {
		return conexion;
	}

	public void setConexion(Connection conexion) {
		this.conexion = conexion;
	}



	public List<ServicioDTO> obtenerServicios()
	{
		List<ServicioDTO> listaServicios = new ArrayList<ServicioDTO>();
		ResultSet rs= null;

		try
		{
			CallableStatement cstmt = conexion.prepareCall("{ call paListarServicios()}");

			rs = cstmt.executeQuery();
			ServicioDTO servicios =  null;


			while (rs.next()){

				servicios = new ServicioDTO();
				servicios.setIdServicio(rs.getInt("idServicio"));
				servicios.setServicioDescripcion(rs.getString("servicioDescripcion"));
				servicios.setTipoOrden(rs.getInt("tipoOrden"));
				if(rs.getInt("tipoOrden")==1){
					servicios.setDescripcionTipoOrden("Mantencion");
				}else
				{
					servicios.setDescripcionTipoOrden("Reparacion");
				}
				servicios.setPrecioListaServicio(rs.getInt("precioListaServicio"));

				listaServicios.add(servicios);
			}
			cstmt.close();
			} catch (SQLException ex) {
				throw new RuntimeException("Error: listar servicios.",ex);                    
			}finally {
				try{
					rs.close();
					conexion.close();
				}catch (Exception ex){

				}
				try{
					rs.close();
					conexion.close();
				}catch (Exception ex){
				}
			}
		return listaServicios;
	}
	
	public ServicioDTO traerServicioEditar(int idServicio) {

		
		   ResultSet rset = null;
		   ServicioDTO servicioEditar = new ServicioDTO();
		   
			try {
					
					
					CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionTraerServicioEditar(?)}");
					
					int i = 1;
					cstmt.setInt(i++,idServicio);
					rset = cstmt.executeQuery();

					while (rset.next()) {
						
						servicioEditar = new ServicioDTO();
						servicioEditar.setIdServicio(rset.getInt("idServicio"));
						servicioEditar.setServicioDescripcion(rset.getString("servicioDescripcion"));
						servicioEditar.setTipoOrden(rset.getInt("tipoOrden"));
						servicioEditar.setPrecioListaServicio(rset.getInt("precioListaServicio"));			
		
					}
					cstmt.close();
				
				
				
			   } catch (SQLException ex) {
				   
			        throw new RuntimeException("error traer servicio editar.",ex);   
			        
				   }finally {
					   
				        try{
				       	 	  conexion.close();
				       	 
				           }catch (Exception ex){
				           
				           }
				           try{
				        		conexion.close();
				           
				        	   }catch (Exception ex){      
				        	   }
			       
				   	}


			return servicioEditar;
		
	
	}
	
	public boolean eliminarServicio(int idServicio){

		try {
			
			
			CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionEliminarServicio(?)}");
			int i=1;
			cstmt.setInt(i++,idServicio);
			cstmt.executeUpdate();
			cstmt.close();
			
		 } catch (SQLException ex) {
	         throw new RuntimeException("error: eliminar servicio.",ex);   
	         
	    }finally {
	         try{
	        	 conexion.close();
	        	 return false;
	        }catch (Exception ex){
	            
	        }
	        try{
	        	
	            conexion.close();
	            return false;
	        }catch (Exception ex){
	            
	        }
	        
	    }	
		return true;
			
	}
	
	public boolean editarServicio(ServicioDTO servicioEditado) {

		try {
				CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionEditarServicio(?,?,?,?,?)}");
		
				int i = 1;
				cstmt.setInt(i++,servicioEditado.getIdServicio());
				cstmt.setString(i++,servicioEditado.getServicioDescripcion());
				cstmt.setInt(i++,servicioEditado.getTipoOrden());
				cstmt.setInt(i++,servicioEditado.getPrecioListaServicio());
				cstmt.setString(i++,servicioEditado.getFechaCreacion());
				
				
				cstmt.executeUpdate();
				cstmt.close();
				
		} catch (Exception ex) {
			throw new RuntimeException("error en DAO: editar servicio.",ex); 
		}finally {
			   
	        try{
	       	 	  conexion.close();
	       	 
	           }catch (Exception ex){
	           
	           }
	           try{
	        		conexion.close();
	           
	        	   }catch (Exception ex){      
	        	   }
       
	   	}			
				return true;
	}

	public boolean registrarServicioNuevo(ServicioDTO servicioNuevo) {
		try {
			
			
			CallableStatement cstmt = conexion.prepareCall("{ call paInsRefaxionRegistrarServicio(?,?,?,?)}");
	
			int i = 1;

			cstmt.setString(i++,servicioNuevo.getServicioDescripcion());
			cstmt.setInt(i++,servicioNuevo.getTipoOrden());
			cstmt.setInt(i++,servicioNuevo.getPrecioListaServicio());
			cstmt.setString(i++,servicioNuevo.getFechaCreacion());
		
			
			cstmt.executeUpdate();
			cstmt.close();
			
			return true;
			
	
	
	 } catch (SQLException ex) {
         throw new RuntimeException("registrar servicio.",ex);     
        
    }finally {
         try{
        	 conexion.close();
        }catch (Exception ex){
            
        }
        try{
            conexion.close();
        }catch (Exception ex){
        	 return false;
        }
        
    }
	
	}
	
}
